home *** CD-ROM | disk | FTP | other *** search
/ Language/OS - Multiplatform Resource Library / LANGUAGE OS.iso / dsp / dspgroup / bell212.arc / DRUN2.ASM < prev    next >
Encoding:
Assembly Source File  |  1986-07-25  |  8.0 KB  |  191 lines

  1.        TITL ' TMS7041 MODEM RUN CODE '
  2.        IDT  'RUN2'
  3.        OPTION XREF,TUNLST
  4. ************************************************************
  5. **  300bps Modem Operation.                               **
  6. **  This code handles the run time operation and          **
  7. **  communication of the modem.  This includes the DTE    **
  8. **  interface, 320 interface, and overspeed operations.   **
  9. **                                                        **
  10. **  Written by Peter Ehlig                                **
  11. **                                                        **
  12. **  Revision 1.1  12/12/85 PETER EHLIG                    **
  13. **  Revision 1.2   1/27/86 PETER EHLIG                    **
  14. **  Revision 1.2   5/20/86 PETER EHLIG                    **
  15. **                                                        **
  16. **  COPYRIGHT TEXAS INSTRUMENTS,  07/25/86                **
  17. **                                                        **
  18. ************************************************************
  19. *
  20. *   DEFINITIONS AND REFERENCES
  21.        DEF  B103
  22.        REF  TOP,PRINT
  23. *
  24.        PAGE
  25.        COPY DTE2.EQU
  26. *******----------------------------------------*******
  27. *****     DSP XMIT/RECEIVE ROUTINES              *****
  28. *******----------------------------------------*******
  29. *
  30. B103   EQU   $
  31.        CLR   CWT1           ; CLEAR TIMEOUT COUNTER
  32.        CLR   CWT2           ; FOR DELAY OF CARRIER LOSS
  33.        CLR   CMSTAT         ; ALSO SAMPLE/BAUD COUNT
  34. SNDMK  MOV   %>21,A        SEND MARK TO 320
  35. SND03  MOVP  %>3F,DDDR      ; TURN DPORT LINES OUT
  36.        ANDP  %>C0,DPORT     ; CLEAR OFF CURRENT BITS
  37.        MOVP  A,DPORT        ; SEND OUT SCRAM MARKS
  38.        ANDP  %NOT6,BPORT    ; LATCH NEW DATA
  39.        ORP   %BIT6,BPORT    ; RESET READ BIT
  40.        MOVP   %>00,DDDR     ; Reset DPORT as all inputs
  41. *
  42. *  TRANSMIT UNSCRAMBLED MARKS AND RECEIVE
  43. SRC1   BTJZP %BIT7,DPORT,SRC2   ; WAIT FOR WRITE FROM 320
  44. SHKTCH BTJOP %BIT6,DPORT,RDTE   ; WAIT FOR READ FROM 320
  45.        BR    @SRC3              ; PROCESS READ FROM 320
  46. RDTE   BTJOP %BIT1,SSTAT,DTEG   ; IS DTE REC BUF FULL
  47. XDTE   BTJOP %BIT0,SSTAT,DTEP   ; IS DTE TRANS BUF EMPTY
  48.        JMP   SRC1               ; LOOK AGAIN
  49. *
  50.        PAGE
  51. *
  52. *    CODE INTERFACE TO DTE
  53. *
  54. DTEG   EQU   $
  55.        MOVP  RXBUF,A            ; YES, GET THE CHARACTER?
  56.        BTJZ  %BIT4,SWSTAT,OVRSQ   ; IS ESC ENABLED?
  57.        CMP   %>1B,A             ; IF A <> ESCAPE
  58.        JNE   OVRSQ       ;--- (JNE to enable)- THEN CONTINUE
  59. *                              ; PATCH >E6 TO >E0 TO DISABLE
  60. *                               ; ESCAPE SEQUENCE
  61. SQU03  CLR   A                  ; CLEAR COMMAND BUFFER
  62.        MOVP  %>3F,DDDR          ; TURN DPORT OUT
  63.        MOVP  A,DPORT            ; RESET COMMAND
  64.        ANDP  %NOT6,BPORT        ; RESET THE READ ACKNOWLEDGE
  65.        ORP   %BIT6,BPORT        ; LATCH SQUELCH COMMAND
  66.        MOVP  %>00,DDDR          ; TURN DPORT IN
  67.        ANDP  %NOT0,BPORT        ; TURN OFF THE CODEC
  68.        BR    @TOP               ; AND RETURN TO MONITOR
  69. OVRSQ  INC   XCHCNT             ; INCREMENT BYTE COUNT
  70.        BTJO  %BIT5,CMSTAT,DTEGER    ; CHECK FOR BUF2 FULL
  71.        BTJO  %BIT3,CMSTAT,DTEG1     ; CHECK IF 1ST CHAR
  72.        OR    %BIT7,CMSTAT       ; FLAG FOR START BIT
  73.        MOV   A,XBUF1            ; IF SO THEN RESTART
  74.        MOV   %>A,XBTCNT         ; SET BIT COUNT TO 10
  75.        OR    %BIT3,CMSTAT       ; SET TRANS ACTIVE
  76.        JMP   XDTE               ; CHECK OUTPUT
  77. DTEG1  MOV   A,XBUF2            ; SAVE IT IN THE BUF2
  78.        OR    %BIT5,CMSTAT       ; SET BUF2 FULL FLAG
  79.        JMP   XDTE               ; CHECK OUTPUT
  80. *
  81. DTEGER EQU   $                  ; SQUELCH THE MODEM
  82.        MOVD  %BUFERR,MSGL       ; SEND ERROR MESSAGE
  83.        CALL  @PRINT             ; TO USER TERMINAL
  84.        JMP   SQU03              ; EXIT ROUTINE
  85. *
  86. DTEP   EQU   $
  87.        BTJZ  %BIT4,CMSTAT,SRC1   ; CHECK FOR CHARACTER READY
  88.        MOV   RBUF2,A              ; GET BUFFERED CHARACTER
  89.        MOVP  A,TXBUF            ; SEND IT TO THE DTE
  90.        AND   %NOT4,CMSTAT       ; RESET BUFFER FULL FLAG
  91.        JMP   SRC1               ; RETURN TO FLAG LOOP
  92. *
  93.        PAGE
  94. *    RECEIVE BIT FROM THE 320
  95. *    320 just finished writing to the buffer
  96. *    DPORT IS SET TO ALL INPUTS EXCEPT WHEN 7742 IS OUTPUT
  97. SRC2   EQU   $
  98.        ANDP  %NOT7,BPORT       ; TOGGLE B7 TO ENABLE RECEIVE
  99. *             LATCH AND TO RESET 320 WRITE ACKNOWLEDGE(WACK)
  100. *
  101.        MOVP  DPORT,A            ; GET THE RETURNED DATA
  102.        MOV   A,XDIBIT           ; AND HOLD IT IN XDIBIT
  103.        ORP   %BIT7,BPORT       ; TURN LATCHES OFF AFTER READ
  104.        BTJZ  %BIT5,A,CHKTO      ; IF NO CARRIER THEN DONE
  105.        CLR   CWT1               ; CLEAR DCD TIMOUT COUNTER
  106.        CLR   CWT2               ; CLEAR DCD TIMOUT COUNTER
  107. NEWBIT BTJO  %BIT2,CMSTAT,RCH1   ; CHECK FOR REC CHAR ACTIVE
  108. *
  109.        RRC   XDIBIT             ; CHECK DIBIT1
  110.        JNC   OVRR3              ; IF HIGH CHECK XMTCHR
  111.        BR    @SHKTCH            ; ELSE GO BACK TO LOOP
  112. OVRR3  EQU   $
  113.        MOV   %8,RBTCNT          ; SET REC BIT COUNT REG
  114.        OR    %BIT2,CMSTAT       ; SET REC CHAR ACTIVE
  115.        BR    @RDTE              ; CHECK DTE
  116. *
  117. RCH1   SUB   %1,RBTCNT          ; CHECK BIT POSITION
  118.        JP    RCH2               ; IF > 0 GET 2 BITS
  119. *
  120.        RRC   XDIBIT             ; PUT BIT7 INTO
  121.        RRC   RBUF1              ; REC CHAR HOLD REG
  122.        MOV   RBUF1,RBUF2           ; PUT CHAR IN OUT BUFFER
  123.        OR    %BIT4,CMSTAT       ; SET BUFFER FULL FLAG
  124.        CLR   RBUF1              ; CLEAR BUFFER FOR NEXT CHAR
  125.        AND   %NOT2,CMSTAT       ; RESET REC CHAR ACTIVE
  126.        BR    @RDTE              ; CHECK DIBIT1 FOR START BIT
  127. *
  128. RCH2   RRC   XDIBIT             ; MOVE DIBIT0 TO
  129.        RRC   RBUF1              ; REC CHAR HOLD REG
  130.        BR    @RDTE              ; CHECK DTE
  131. *
  132. CHKTO  EQU  $
  133.        INC  CWT1                ; COUNT TO ABOUT
  134.        JNC  OVTO1               ; 10 SECONDS
  135.        INC  CWT2
  136.        JNC  OVTO1
  137.        BR   @SQU03              ; IF NO CARRIER SQUELCH
  138. OVTO1  BR   @RDTE               ; ELSE CONTINUE
  139.        PAGE
  140. *
  141. *   SEND BIT TO THE 320
  142. *   320 just read from the latches
  143. *
  144. SRC3   EQU   $
  145. TCNT   BTJO  %BIT3,CMSTAT,TCHR0     ; IS TRANS CHAR ACTIVE
  146. TSNDMK BR    @SNDMK             ; IF NOT SEND STOPBITS
  147. *
  148. TCHR0  CLR   XDIBIT             ; CLEAR OUT DIBIT REG
  149.        SUB   %1,XBTCNT          ; CHECK POSITION
  150.        JP    TCHR3              ; > 2 MEANS TRANSMIT BITS
  151. TCHR1  EQU   $
  152.        BTJO  %BIT5,CMSTAT,TCHR2 ; IS THE 2ND BUFFER FULL
  153.        AND   %NOT3,CMSTAT       ; ELSE RESET TRANS ACTIVE
  154.        JMP   TSNDMK             ; SEND THE STOP BIT
  155. *
  156. TCHR2  MOV   XBUF2,XBUF1        ; MOVE BUF2 TO BUF1
  157.        AND   %NOT5,CMSTAT       ; RESET BUF2 FULL FLAG
  158.        OR    %BIT7,CMSTAT       ; SET FLAG FOR START BIT
  159.        MOV   %>A,XBTCNT         ; RESET FULL CHAR COUNT
  160.        JMP   TSNDMK             ; SEND THE STOP BIT
  161. *
  162. TCHR3  BTJZ  %BIT7,CMSTAT,TCHR4     ; START BIT NEEDED
  163.        AND   %NOT7,CMSTAT       ; RESET START BIT FLAG
  164.        JMP   TCHSD              ; SET DIBIT TO START BIT
  165. TCHR4  EQU   $
  166.        CMP   %1,XBTCNT          ; IF BIT ONE THEN
  167.        JEQ   TSNDMK             ; SEND FIRST STOP BIT
  168.        RRC   XBUF1              ; GET THE NEXT BIT
  169.        JNC   TCHSD              ; IF ZERO THEN SEND
  170.        OR    %BIT0,XDIBIT       ; ELSE SET BIT TO ONE
  171. TCHSD  EQU   $
  172.        MOV   XDIBIT,A              ; HOLD IT FOR TRANSMIT
  173.        OR    %>20,A             ; ADD TRANSMIT COMMAND
  174.        MOVP  %>3F,DDDR          ; POINT DPORT OUT
  175.        ANDP  %>F0,DPORT         ; CLEAR OUT DIBIT VALUE
  176.        ORP   A,DPORT            ; SEND TO PORT
  177.        ANDP  %NOT6,BPORT        ; Latch data into xmt.buffer
  178.        ORP   %BIT6,BPORT        ; and reset Read Ack(RACK)
  179.        MOVP  %>00,DDDR          ; Reset DPORT as all inputs
  180.        BR    @RDTE              ; WAIT FOR RETURN LOOP
  181. *
  182.        PAGE
  183. *******----------------------------------------*******
  184. *****    screen messages - text statements       *****
  185. *******----------------------------------------*******
  186. BUFERR TEXT   'DTE BUFFER OVERFLOW ERROR'
  187.        BYTE   0
  188. *
  189. *
  190.        END
  191.